from abc import abstractmethod, ABC
from contextlib import AbstractAsyncContextManager

from recruit.application.commands.create_user import CreateUser
from recruit.application.commands.get_user import GetUser
from recruit.application.commands.update_user import UpdateUser


class UserInteractorFactory(ABC):
    @abstractmethod
    def create_user(self) -> AbstractAsyncContextManager[CreateUser]: ...

    @abstractmethod
    def get_user(self) -> AbstractAsyncContextManager[GetUser]: ...

    @abstractmethod
    def update_user(self) -> AbstractAsyncContextManager[UpdateUser]: ...
